package com.hefei.hight.reflection;

import java.lang.reflect.Method;

/**
 * @author caizhengjun
 * @date 2020/9/5 11:27 上午
 */
public class Test05 {
    public static void main(String[] args) throws Exception {
        Class<Student> aClass = (Class<Student>) Class.forName("com.hefei.hight.reflection.Student");
        //1获取方法
        //获取clazz对应类中的所有方法--方法数组（一）
        //不能获取private方法，并且获取从父类继承来的所有方法
        Method[] methods = aClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        System.out.println("===========================================");
        //2获取方法
        //获取clazz对应类中的所有方法-方法数组（一）
        //不能获取private方法，不能获取从父类继承来的所有方法
        Method[] declaredMethods = aClass.getDeclaredMethods();
        for (Method method : declaredMethods) {
            System.out.println(method);
        }
        System.out.println("===========================================");
        //获取指定的方法
        //需要参数名称和参数列表，无参则不需要写
        //对于方法public void setName(String name){ }
        Method method = aClass.getDeclaredMethod("setName", String.class);
        System.out.println(method);
        //对于方法public void setAge(String age){ }
        Method setAge = aClass.getDeclaredMethod("setAge", Integer.class);
        System.out.println(setAge);

        //2执行方法
        Student student = aClass.newInstance();
        method.invoke(student, "2");
    }
}
